import axios from 'axios'
import { ElLoading, ElMessage } from "element-plus";
const request = axios.create({
    baseURL: 'http://localhost:8080/',
    timeout: 10000
})

// 定义错误消息
const errorMsg = {
    'ERR_NETWORK': '网络错误，请检查网络连接',
    'ERR_TIMEOUT': '请求超时，请稍后再试',
    'ERR_SERVER': '服务器错误，请稍后再试',
    'ERR_NOT_FOUND': '请求的资源不存在',
    'ERR_FORBIDDEN': '权限不足，请联系管理员',
    'ERR_UNAUTH': '未登录或登录已过期，请重新登录',
    'ERR_PARAMS': '参数错误',
    'ERR_UNKNOWN': '未知错误',
    'ERR_BAD_REQUEST': '404错误' //有效
}
// 封装请求拦截器
request.interceptors.request.use(config => {
    loading()
    // 在发送请求之前做些什么
    // 如果是生产环境，那么需要携带上token production||development
    if (import.meta.env.VITE_USER_NODE_ENV == 'production' && config.url!="/api/user/login") {
        const token = localStorage.getItem('token')
        if (token) {
            config.headers.Authorization = `${token}`
        } else {
            ElMessage.error("未登录或登录已过期，请重新登录")
            return Promise.reject("未登录或登录已过期，请重新登录")
        }
    }
    setTimeout(() => {
        loading().close()
    }, 1000)
    return config
}, (error) => {
    return Promise.reject(error)
})

// 封装响应拦截器
request.interceptors.response.use((response) => {
    return response.data.data
}, (error) => {
    console.log(error)
    ElMessage.error(errorMsg[error.code])
})

// 封装loading方法
const loading = () => {
    return ElLoading.service({
        lock: true,
        text: 'Loading',
        background: 'rgba(255, 255, 255, 0.2)',
    })
}

export default request
